ConcurrentLinkedQueue
1. 前言
- 基于链表的线程安全的队列,适用于高并发
- 无界FIFO队列
2. 源码分析
2.1 数据结构
1 | public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> |
UML类图如下:
ConcurrentLinkedQueue的链表Node中的item和next的类型是volatile,通过CAS来设置值。
ConcurrentLinkedQueue是通过volatile + CAS来实现多线程对竞争资源的互斥访问的
2.2 核心函数
- 构造函数
1 | public ConcurrentLinkedQueue() { |
- 添加元素: offer(E e)
1 | public boolean offer(E e) { |
- 取出元素: poll()
1 | public E poll() { |
- size()
1 | //遍历链表获取size |